Annotations are a form of metadata applied to elements of a program. Annotations may provide instructions to a compiler or a runtime environment. Annotations have a number of uses including but not limited to:                a. Enforce semantics—Annotations can be used by a compiler to enforce semantics explicitly declared by a user.        b. Information for the compiler—Annotations can be used by the compiler to detect errors or suppress warnings.        c. Compile-time and deployment-time processing—Software tools can process annotations to generate, for example, code and XML files.        d. Runtime processing—Some annotations are available to be examined at runtime.        
Annotations may be accessed by various frameworks for code analysis, code evaluation, and/or code testing. Reflective Application Programming Interfaces (APIs) and supporting infrastructure may be used to access annotations attached to various class files, or other compiled representations or executable output. Executable output, as referred to herein, may correspond to the output of a Compiler or other tools that is intended to be executed by a Runtime Interpreter.
Annotations may be processed using annotation processors during compile-time and/or during runtime. Annotation processors may process annotations detected in source code, class files, or other compiled representations or executable output. As an example, annotation processors may process a first annotation(s), resulting in the production of new source files having further annotations that are to be iteratively processed.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.